!> author: 左志华
!> date:   2022-05-25
program main

    use, intrinsic :: iso_c_binding

    !> 三种接口
    interface
        !> 接口 1：(*)
        integer function max_1(two_int) bind(c, name="max")
            integer, intent(in) :: two_int(*)
        end function max_1
        !> 接口 2（不推荐）：(1)
        integer function max_2(two_int) bind(c, name="max")
            integer, intent(in) :: two_int(1)
        end function max_2
        !> 接口 3：c_ptr
        integer function max_3(two_int) bind(c, name="max")
            import
            type(c_ptr), intent(in), value :: two_int
        end function max_3
    end interface

    print *, max_1([1, 2])
    print *, max_2([1, 2])
    block
        integer, target :: i(2) = [1, 2]
        print *, max_3(c_loc(i))
    end block

end program main

!>> fpm run
! 1,2           2
! 1,2           2
! 1,2           2
